package model;

/**
 * Deze klasse zorgt voor het beheren van de verschillende 'smaakjes' op basis van de 
 * datadragers en uitvoeringen van de Film
 * 
 * @author Maurice & Eric
 */
public class ArtikelFilm extends Artikel {

    private Datadrager datadrager = null;
    private Uitvoering uitvoering = null;
    private String titel = null;
    private Genre genre = null;
    private boolean afgeschreven = false;
    private double prijs = -1;
    private boolean status = false;
    private int duur = -1;
    private String producent = null;
    private String productiemaatschappij = null;
    private String cast = null;
    private String samenvatting = null;

    /**
     * Artikel object creeeren aan de hand van een query resultset.
     *
     * @param vestigingID
     * @param artikelnummer
     * @param titel
     * @param afgeschreven
     * @param prijs
     * @param status
     * @param datadrager
     * @param genre
     * @param uitvoering
     * @param duur
     * @param producent
     * @param productiemaatschappij
     * @param cast
     * @param samenvatting
     */
    public ArtikelFilm(int vestigingID, int artikelnummer, String titel,
            boolean afgeschreven, double prijs,
            boolean status, Datadrager datadrager, Genre genre,
            Uitvoering uitvoering, int duur, String producent,
            String productiemaatschappij, String cast, String samenvatting) {

        this.setVestigingID(vestigingID);
        this.setArtikelNummer(artikelnummer);
        this.titel = titel;
        this.afgeschreven = afgeschreven;
        this.prijs = prijs;
        this.status = status;
        this.datadrager = datadrager;
        this.genre = genre;
        this.uitvoering = uitvoering;
        this.duur = duur;
        this.producent = producent;
        this.productiemaatschappij = productiemaatschappij;
        this.cast = cast;
        this.samenvatting = samenvatting;
    }

    /**
     * Constructor om een artikelFilm aan te maken op basis van gegevens van het centrale systeem
     * @param artikelnummer
     * @param titel
     * @param genre
     * @param duur
     * @param producent
     * @param productiemaatschappij
     * @param cast
     * @param samenvatting 
     */
    public ArtikelFilm(int artikelnummer, String titel, Genre genre,
            int duur, String producent,
            String productiemaatschappij, String cast, String samenvatting) {

        this.setArtikelNummer(artikelnummer);
        this.titel = titel;
        this.genre = genre;
        this.duur = duur;
        this.producent = producent;
        this.productiemaatschappij = productiemaatschappij;
        this.cast = cast;
        this.samenvatting = samenvatting;
    }
    

    public Datadrager getDatadrager() {
        return datadrager;
    }

    public void setDatadrager(Datadrager datadrager) {
        this.datadrager = datadrager;
    }

    public Uitvoering getUitvoering() {
        return uitvoering;
    }

    public void setUitvoering(Uitvoering uitvoering) {
        this.uitvoering = uitvoering;
    }

    public String getTitel() {
        return titel;
    }

    public void setTitel(String titel) {
        this.titel = titel;
    }

    public Genre getGenre() {
        return genre;
    }

    public void setGenre(Genre genre) {
        this.genre = genre;
    }

    public boolean isAfgeschreven() {
        return afgeschreven;
    }

    public double getPrijs() {
        return prijs;
    }

    public boolean isStatus() {
        return status;
    }

    public int getDuur() {
        return duur;
    }

    public String getProducent() {
        return producent;
    }

    public String getProductiemaatschappij() {
        return productiemaatschappij;
    }

    public String getCast() {
        return cast;
    }

    public String getSamenvatting() {
        return samenvatting;
    }

    public void setAfgeschreven(boolean afgeschreven) {
        this.afgeschreven = afgeschreven;
    }
    
    
    /**
     * Indien op de Aanpassen knop wordt geklikt, en dus een artikelFilm wordt aangepast, dan wordt 
     * gecontroleerd of dat deze daadwerkelijk is aangepast.
     * @return 
     */
    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ArtikelFilm other = (ArtikelFilm) obj;
        if (this.datadrager != other.datadrager) {
            return false;
        }
        if (this.uitvoering != other.uitvoering) {
            return false;
        }
        if ((this.titel == null) ? (other.titel != null) : !this.titel.equals(other.titel)) {
            return false;
        }
        if (this.genre != other.genre) {
            return false;
        }
        if (this.afgeschreven != other.afgeschreven) {
            return false;
        }
        if (Double.doubleToLongBits(this.prijs) != Double.doubleToLongBits(other.prijs)) {
            return false;
        }
        if (this.status != other.status) {
            return false;
        }
        if (this.duur != other.duur) {
            return false;
        }
        if ((this.producent == null) ? (other.producent != null) : !this.producent.equals(other.producent)) {
            return false;
        }
        if ((this.productiemaatschappij == null) ? (other.productiemaatschappij != null) : !this.productiemaatschappij.equals(other.productiemaatschappij)) {
            return false;
        }
        if ((this.cast == null) ? (other.cast != null) : !this.cast.equals(other.cast)) {
            return false;
        }
        if ((this.samenvatting == null) ? (other.samenvatting != null) : !this.samenvatting.equals(other.samenvatting)) {
            return false;
        }
        return true;
    }
    
    

}
